package cn.tedu.review;
/*本类用于回顾继承*/
public class TestExtends1 {
    public static void main(String[] args) {
        System.out.println(1);  //数字,字符串和(单)字符都可以sout
        System.out.println("sdf的");
        System.out.println('F');

        //7.创建子类对象进行测试
       ComputerStudent s1 = new ComputerStudent(98);
        MathStudent s2 = new MathStudent(2,"李四",'女',89);
        ChineseStudent s3 = new ChineseStudent(3,"王五",'女',100);
        //8.利用创建好的对象进行方法测试
        s1.proClass();
        s1.hobby();
        System.out.println(s1.sno); //s1对象继承了父类的四个成员变量
        System.out.println(s1.score);

        //查看子类s1的值

        s2.proClass();
        s2.hobby();
        System.out.println(s2.name);

        s3.proClass();
        s3.hobby();
        System.out.println(s3.gender);

        //9.创建父类对象进行方法测试
        Student s0 = new Student(0,"海绵宝宝",'男',3);
        s0.thinkingClass();
        s0.proClass();
        System.out.println(s0.score);//可以调用父类或子类的传入的实际参数
    }
}
//1.定义学生类
class Student{
    //2.定义学生的属性
    int sno;//学号
    String name;//姓名
    char gender;//性别
    double score;//分数

    /*public Student() {
    }*/

    //6.1添加父类的全参构造
    public Student(int sno, String name, char gender, double score) { //设计全参构造,将输入的实参赋值给本类的成员变量
        this.sno = sno;
        this.name = name;
        this.gender = gender;
        this.score = score;
    }
    //3.1定义父类的功能
    public void thinkingClass(){
        System.out.println("正在上思修课");
    }
    //3.2定义父类的功能
    public void proClass(){
        System.out.println("正在上专业课");
    }
}
//2.定义学生类的子类,区分不同的专业
class ComputerStudent extends Student{
    public ComputerStudent(double score){ // 子实参->父形参->父类或子类的成员变量,,,两个形参传递或者一个实参一个形参传递,然后回到子类实参都父类实参,最后到父类和子类的成员变量
        super(2,"李四",'女',score);
    }

    /*public ComputerStudent(int sno, String name, char gender, double score) { //调用了
//        super(sno, name, gender, score);
        super(2,"李四",'女',89);
    }*/
/*public ComputerStudent(int sno, String name, char gender, double score) { //子类继承了父类的成员变量属性,形成全参构造
        super(sno, name, gender, score);
    }*/
    //计算机专业学生
    //6.2生成子类的全参构造,并调用父类的全参构造
    /*public ComputerStudent(int sno, String name, char gender, double score) {
        super(sno, name, gender, score);
    }*/
    /*public ComputerStudent(int sno, String name, char gender, double score) {
        super(sno, name, gender, score);
    }*/

    //4.1重写父类的功能
    @Override //验证重写的方法
    public void proClass(){
        System.out.println("正在上编程课");
    }
    //5.1定义子类的特有功能
    public void hobby(){
        System.out.println("喜欢敲代码~");
    }
}
class MathStudent extends Student{//数学专业学生
    //6.3生成子类的全参构造,并调用父类的全参构造
    public MathStudent(int sno, String name, char gender, double score) {
        super(sno, name, gender, score);
    }
    //4.2重写父类的功能
    @Override
    public void proClass(){
        System.out.println("正在上数学理论课");
    }
    //5.2定义子类的特有功能
    public void hobby(){
        System.out.println("喜欢学模糊数学");
    }
}
class ChineseStudent extends Student{//中文专业学生
    //6.4生成子类的全参构造,并调用父类的全参构造 //??!!
    public ChineseStudent(int sno, String name, char gender, double score) {
        super(sno, name, gender, score);
    }
    //4.3重写父类的功能
    @Override
    public void proClass(){
        System.out.println("正在上写作课");
    }
    //5.3定义子类的特有功能
    public void hobby(){
        System.out.println("喜欢写小说"); //not low, sophisticated
    }
}